package binary

import binary.module.*
import binary.type.FuncType
import binary.type.Limits
import binary.type.TableType

/**
 *@author haypo
 *@since 2021/7/20
 */
typealias TypeIdx = UInt
typealias FuncIdx = UInt
typealias TableIdx = UInt
typealias MemIdx = UInt
typealias GlobalIdx = UInt
typealias LocalIdx = UInt
typealias LabelIdx = UInt
typealias MemType = Limits

class Module(
    var Magic: UInt, //魔数
    var Version: UInt, // 版本号
    var CustomSecs: Array<CustomSec?>, //自定义段
    var TypeSec: Array<FuncType?>, //
    var ImportSec: Array<Import?>,//导入段
    var FuncSec: Array<TypeIdx?>, //函数段
    var TableSec: Array<TableType?>, //表段
    var MemSec: Array<MemType?>, //内存段
    var GlobalSec: Array<Global>, //全局段
    var ExportSec: Array<Export>, //导出段
    var StartSec: FuncIdx, //起始段
    var ElemSec: Array<Elem>, //元素段
    var CodeSec: Array<Code>,//代码段
    var DataSec: Array<Data> //数据段
) {
    constructor() : this(
        Magic = 0U, Version = 0U,
        CustomSecs = arrayOf(),
        TypeSec = arrayOf(),
        arrayOf(),
        arrayOf(), //函数段
        arrayOf(), //表段
        arrayOf(), //内存段
        arrayOf(), //全局段
        arrayOf(), //导出段
        0U, //起始段
        arrayOf(), //元素段
        arrayOf(),//代码段
        arrayOf() //数据段
    ) {

    }

}